// 由于 webpack 是基于Node进行构建的，所有，webpack 的配置文件中，任何合法的Node代码都是支持的
const path = require('path');
// 在内存中，生成指定的模板页面，生成一份内存中的首页，同时把打包好的 bundle 注入到页面中
const htmlWebpackPlugin = require('html-webpack-plugin');
/* 当以命令行形式运行 webpack 或 webpack-dev-server 的时候，工具会发现，我们并没有提供 要打包的文件的 入口 和出口文件
此时，他会检查项目根目录中的配置文件，并读取这个文件，就拿到了 导出的这个 配置对象，然后根据这个对象，进行打包构建 */

const VueLoaderPlugin = require('vue-loader/lib/plugin');
module.exports = {
    entry: path.join(__dirname, './src/main.js'), // 入口文件
    output: { // 指定输出选项
        path: path.join(__dirname, './dist'), // 输出路径
        filename: 'bundle.js', // 指定输出文件的名称
    },
    plugins: [ // 所有 webpack 插件的配置节点
        new htmlWebpackPlugin({
            template: path.join(__dirname, './src/index.html'), // 指定模板文件路径
            filename: 'index.html', // 设置生成的内存页面的名称
        }),
        new VueLoaderPlugin(),
    ],
    module: { // 配置第三方 loader 模块
        rules: [ // 第三方模块的匹配规则
            {
                test: /\.css$/,
                use: ['style-loader', 'css-loader']
            }, // 处理css文件的 loader
            {
                test: /\.less$/,
                use: ['style-loader', 'css-loader', 'less-loader']
            }, // 处理 less文件的loader
            {
                test: /\.scss$/,
                use: ['style-loader', 'css-loader', 'sass-loader']
            }, // 处理 less文件的loader
            {
                test: /\.(jpg|png|gif|bmp|jpeg)$/,
                use: [{
                    loader: 'url-loader',
                    options: {
                        esModule: false,
                        name: '[hash:8]-[name].[ext]',
                        limit: 28574,
                    }
                }]
            }, // 处理 图片路径文件的loader
            // { test: /\.js$/, use: 'babel-loader', exclude: /node_modules/ },// 配置 Babel 来转换高级的 ES6 语法
            {
                test: /\.vue$/,
                use: 'vue-loader'
            }, /* 处理 .vue 文件的loader */
            {
                test: /\.(ttf|eot|svg|woff|woff2|otf)$/,
                use: 'url-loader'
            },
        ]
    },
    resolve: {
        alias: {
            /* 设置vue 被导入时候的包的路径 */
            // "vue$": "vue/dist/vue.js"
        }
    }
};